<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /*
          箭头函数：
              ([参数]) => 返回值
          例子：
             无参箭头函数 () => 返回值
             一个参数 a => 返回值
             多个参数 (a, b) => 返回值

             只返回一个对象的函数 () => ({...}) 要用括号包起来，否则会解析成代码块

         箭头函数没有自己的作用域，他的this由外层作用域决定
            箭头函数的this与它的调用方式无关。

    */

    function fn() {
      console.log('fn---->', this)
    }
    const fn2 = () => {
      console.log('fn2---->', this)
    }
    // fn() // window
    // fn2() // window

    const obj = {
      name: '孙悟空',
      fn,
      fn2,
      sayHello() {
        console.log(this.name)

        function t() {
          console.log('t---->', this) // this会指向window
        }
        t() // 函数式调用，指向window

        const t2 = () => {
          console.log('t2----->',this)
        }
        t2() // 箭头函数不看调用方式，由外层作用域决定，外层作用域是sayHello, 所有this指向obj
      }
    }
   // obj.fn() // obj
   // obj.fn2() // window

   obj.sayHello() // 孙悟空  this 指向obj
  </script>
</body>
</html>